from flask import Flask, request
import redis
from PyCmpltrtok.common import uuid
import time

# Flask实例
app = Flask(__name__)

# 连接本机6379端口上的redis的第0个数据库
rdb = redis.Redis('127.0.0.1', 6379, 0)


@app.route("/api", methods=['POST'])
def do_infer():
    """装饰器@app.route定义了在/api上的HTTP POST接口。"""
    # 获取输入字典
    req_json = request.get_json(force=True)
    # 获取输入
    xinput = req_json['input']
    username = req_json['username']
    print('input:', xinput)
    print('username:', username)

    # 产生uuid
    xuuid = uuid()
    print('UUID:', xuuid)

    # 放入输入到hash，放入uuid到队列启动运算
    rdb.hset('uuid2input', xuuid, xinput.encode('utf8'))
    rdb.hset('uuid2username', xuuid, username.encode('utf8'))
    rdb.lpush('queue', xuuid)

    # 等待输出
    while True:
        xoutput = rdb.hget('uuid2output', xuuid)
        if xoutput is None:
            time.sleep(0.001)
            continue
        xoutput = xoutput.decode('utf8')
        print('output:', xoutput)
        break

    # 清理数据
    rdb.hdel('uuid2input', xuuid)
    rdb.hdel('uuid2output', xuuid)
    rdb.hdel('uuid2username', xuuid)

    # 组织返回字典
    res_json = dict()
    res_json['output'] = xoutput

    # 返回
    return res_json


if '__main__' == __name__:
    # 本Flask示例程序运行在0.0.0.0:7777。（就是在本地所在所有网络上监听7777端口。）
    app.run('0.0.0.0', 7777)
